package tedu.api.object;

public class ObjectDemo {
    public static void main(String[] args) {
        System.out.println(null==null);

        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println(str1.equals(str2));

        StringBuilder builder1 = new StringBuilder("hello");
        StringBuilder builder2 = new StringBuilder("hello");
        System.out.println(builder1.equals(builder2));

        //s1与builder1的类型不同，所以equals()一定是false
        System.out.println(str1.equals(builder1));//false



        /*
        调用Object类的equals(),内部还是在使用==比较地址，没有参考意义
        若想比较对象的属性值是否相同，我们认为Object类的equals()并不能满足需求
        因此常常需要重写equals()
         */
        Point p1 = new Point(100,200);
        Point p2 = new Point(100,200);
        System.out.println(p1==p2);

        System.out.println(p1.equals(p2));




        //看的是new的对象，第一个是Point,第二个是Son
        Father f = new Point(100,200);
        System.out.println(f.getClass());
        System.out.println(p1.equals(f));

        Point s = new Son(100,200);
        System.out.println(s.getClass());
        System.out.println(p1.equals(s));










        /*
        输出引用变量时默认调用Object类的toString()方法
        该方法返回的字符串格式为：类的全称@hashcode值
        但通常这个返回结果对我们的开发是没有意义的
        我们真正想输出的应该是对象的属性值
        我们认为Object类的toString()并不能满足需求
        因此我们常常重写toString()来返回具体的属性值
         */
        /*
        Point p = new Point(100,200);
        System.out.println(p);
        System.out.println(p.toString());

         */
    }
}



